import jieba
import threading
import logging

logger = logging.getLogger(__name__)

def extract_book_title(text):
    """
    使用 jieba 提取文本中的可能书名关键词。
    """
    try:
        words = jieba.lcut(text)
        potential_titles = [word for word in words if len(word) > 2]
        if potential_titles:
            logger.info(f"识别到的可能书名：{potential_titles}")
            return potential_titles[0]
        else:
            logger.warning("未识别到任何可能的书名")
            return None
    except Exception as e:
        logger.error(f"书名提取失败: {e}")
        return None

def find_book_title(text, timeout_seconds=6):
    """
    尝试提取书名，并在指定的超时时间内返回结果。
    如果超时或失败，记录日志并返回 None。
    """
    result = [None]

    def worker():
        try:
            result[0] = extract_book_title(text)
        except Exception as e:
            logger.error(f"Worker 函数中发生错误: {e}", exc_info=True)

    timer = threading.Timer(timeout_seconds, lambda: logger.error("书名提取操作超时，进入下一步程序"))
    try:
        logger.info("启动书名提取的超时计时器")
        timer.start()
        worker()
    except Exception as e:
        logger.error(f"find_book_title 函数中发生错误: {e}", exc_info=True)
    finally:
        timer.cancel()
        logger.info("超时计时器已取消")

    return result[0]
